package mhwi.characters;

import basemod.abstracts.CustomPlayer;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.cards.red.Strike_Red;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.core.EnergyManager;
import com.megacrit.cardcrawl.core.Settings;
import com.megacrit.cardcrawl.cutscenes.CutscenePanel;
import com.megacrit.cardcrawl.events.city.Vampires;
import com.megacrit.cardcrawl.helpers.FontHelper;
import com.megacrit.cardcrawl.helpers.ScreenShake;
import com.megacrit.cardcrawl.localization.CharacterStrings;
import com.megacrit.cardcrawl.screens.CharSelectInfo;
import mhwi.cards.hunter.*;
import mhwi.cards.taidao.JianQieCard;
import mhwi.helper.ModHelper;
import mhwi.relics.CangLanXingRelic;

import java.util.ArrayList;

import static mhwi.constants.CharacterConstants.*;
import static mhwi.constants.ColorConstant.COLOR_HUNTER;
import static mhwi.constants.ResourcesConstant.EXTENSION_PNG;
import static mhwi.constants.ResourcesConstant.PATH_IMG_CHAR;

public class TemplateHunter extends CustomPlayer {
    private Class<?> HunterClass;
    private AbstractCard.CardColor cardColor;
    // 人物的本地化文本
    private static CharacterStrings characterStrings;

    public TemplateHunter(String name, PlayerClass playerClass, Class< ?> HunterClass, AbstractCard.CardColor cardColor) {
        super(name, playerClass, ORB_TEXTURES, IMG_VFX, LAYER_SPEED, null, null);
        String CLASS_NAME = HunterClass.getSimpleName();
        String IMG_HUNTER = ModHelper.makeFileName(PATH_IMG_CHAR, CLASS_NAME, EXTENSION_PNG);
        this.HunterClass = HunterClass;
        this.cardColor = cardColor;
        // 初始化人物的本地化文本
        characterStrings = CardCrawlGame.languagePack.getCharacterString(ModHelper.makeId(CLASS_NAME));

        // 人物对话气泡的大小
        this.dialogX = (this.drawX + 0.0F * Settings.scale);
        this.dialogY = (this.drawY + 150.0F * Settings.scale);

        // 初始化人物
        this.initializeClass(
                IMG_HUNTER, // 人物图片
                HUNTER_SHOULDER_1, HUNTER_SHOULDER_2,
                HUNTER_CORPSE, // 人物死亡图像
                this.getLoadout(),
                0.0F, 0.0F,
                300.0F, 380.0F, // 人物碰撞箱大小，越大的人物模型这个越大
                new EnergyManager(4) // 初始每回合的能量
        );
    }

    // 初始卡组的ID
    public ArrayList<String> getStartingDeck() {
        ArrayList<String> retVal = new ArrayList<>();
//        retVal.add(ShouQiWuQiCard.ID);
//        retVal.add(FanGunCard.ID);
//        retVal.add(LiShiCard.ID);
//        retVal.add(XinHaoDanCard.ID);
//        retVal.add(MiYaoCard.ID);
//        retVal.add(YingHuaYaoCard.ID);
//        retVal.add(WuQiPaiShengCard.ID);
//        retVal.add(GuiRenYaoCard.ID);
//        retVal.add(HuiFuYaoCard.ID);
//        retVal.add(MoDaoShenYuDeQiCard.ID);
//        retVal.add(XianJingCard.ID);
//        retVal.add(FeiPuCard.ID);
//        retVal.add(RuanHuaCard.ID);
//        retVal.add(ShanGuangDanCard.ID);
//        retVal.add(MaoFanCard.ID);
//        retVal.add(YuanQiYinLiaoCard.ID);
//        retVal.add(DaXiaoGuoShiCard.ID);

        retVal.add(FanGunCard.ID);
        retVal.add(FanGunCard.ID);
        retVal.add(FanGunCard.ID);
        retVal.add(ShouQiWuQiCard.ID);
        retVal.add(LiShiCard.ID);
        retVal.add(XinHaoDanCard.ID);
        return retVal;
    }

    // 初始遗物的ID
    public ArrayList<String> getStartingRelics() {
        ArrayList<String> retVal = new ArrayList<>();
        retVal.add(CangLanXingRelic.ID);
        return retVal;
    }

    @Override
    public CharSelectInfo getLoadout() {
        return new CharSelectInfo(
                characterStrings.NAMES[0], // 人物名字
                characterStrings.TEXT[0], // 人物介绍
                75, // 当前血量
                75, // 最大血量
                0, // 初始充能球栏位
                75, // 初始携带金币
                5, // 每回合抽牌数量
                this,
                this.getStartingRelics(), // 初始遗物
                this.getStartingDeck(), // 初始卡组
                false
        );
    }

    // 人物名字（出现在游戏左上角）
    @Override
    public String getTitle(PlayerClass playerClass) {
        return characterStrings.NAMES[0];
    }

    // 你的卡牌颜色
    @Override
    public AbstractCard.CardColor getCardColor() {
        return cardColor;
    }

    // 翻牌事件出现的你的职业牌
    @Override
    public AbstractCard getStartCardForEvent() {
        return new Strike_Red();
    }

    // 卡牌轨迹颜色
    @Override
    public Color getCardTrailColor() {
        return COLOR_HUNTER;
    }

    // 高进阶带来的生命值损失
    @Override
    public int getAscensionMaxHPLoss() {
        return 5;
    }

    // 卡牌的能量字体
    @Override
    public BitmapFont getEnergyNumFont() {
        return FontHelper.energyNumFontBlue;
    }

    // 人物选择界面点击你的人物按钮时触发的方法
    @Override
    public void doCharSelectScreenSelectEffect() {
        CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.MED, ScreenShake.ShakeDur.SHORT, false);
    }

    // 碎心图片
    @Override
    public ArrayList<CutscenePanel> getCutscenePanels() {
        ArrayList<CutscenePanel> panels = new ArrayList<>();
        panels.add(new CutscenePanel(ModHelper.makePath(PATH_IMG_CHAR, "victory1.png"), "ATTACK_MAGIC_FAST_1"));
        panels.add(new CutscenePanel(ModHelper.makePath(PATH_IMG_CHAR, "victory2.png")));
        panels.add(new CutscenePanel(ModHelper.makePath(PATH_IMG_CHAR, "victory3.png")));
        return panels;
    }

    // 自定义模式选择你的人物时播放的音效
    @Override
    public String getCustomModeCharacterButtonSoundKey() {
        return "ATTACK_HEAVY";
    }

    // 游戏中左上角显示在你的名字之后的人物名称
    @Override
    public String getLocalizedCharacterName() {
        return characterStrings.NAMES[0];
    }

    // 创建人物实例
    @Override
    public AbstractPlayer newInstance() {
        return new TemplateHunter(this.name, this.chosenClass, this.HunterClass, this.cardColor);
    }

    // 第三章面对心脏说的话
    @Override
    public String getSpireHeartText() {
        return characterStrings.TEXT[1];
    }

    // 打心脏的颜色，不是很明显
    @Override
    public Color getSlashAttackColor() {
        return COLOR_HUNTER;
    }

    // 吸血鬼事件文本，主要是他（索引为0）和她（索引为1）的区别（机器人另外）
    @Override
    public String getVampireText() {
        return Vampires.DESCRIPTIONS[0];
    }

    // 卡牌选择界面选择该牌的颜色
    @Override
    public Color getCardRenderColor() {
        return COLOR_HUNTER;
    }

    // 第三章面对心脏造成伤害时的特效
    @Override
    public AbstractGameAction.AttackEffect[] getSpireHeartSlashEffect() {
        return new AbstractGameAction.AttackEffect[]{AbstractGameAction.AttackEffect.SLASH_HEAVY, AbstractGameAction.AttackEffect.FIRE, AbstractGameAction.AttackEffect.SLASH_DIAGONAL, AbstractGameAction.AttackEffect.SLASH_HEAVY, AbstractGameAction.AttackEffect.FIRE, AbstractGameAction.AttackEffect.SLASH_DIAGONAL};
    }

}